-
Notifications
You must be signed in to change notification settings - Fork 147
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add multi-mount parallelstore support #3256
base: develop
Are you sure you want to change the base?
Add multi-mount parallelstore support #3256
Conversation
727d580
to
f607f80
Compare
f607f80
to
3f01fcb
Compare
3f01fcb
to
02c7962
Compare
@@ -41,6 +41,17 @@ sed -i "s/#.*transport_config/transport_config/g" $daos_config | |||
sed -i "s/#.*allow_insecure:.*false/ allow_insecure: true/g" $daos_config | |||
sed -i "s/.*access_points.*/access_points: $access_points/g" $daos_config |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does the goal here is only to support multiple mounts from the server Parallelstore instance, or to support mounts from multiple Parallelstore instances?
I fear, that with multiple Parallelstore instances, the last script that will run will setup access_points
in the config, and it will be the only instance mounted (but multiple times)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The goal is to have 1 parallelstore instance but able to mount to multiple mount points (possible with different mount options).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, perfect. I think it is worth mentioning in the README, that module supports mounting only from Parallelstore instance, but it's possibile to mount it multiple times with different options using pre-existing-network-storage
.
Probably worth mentioning in both modules.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would like to know a bit more about what attempting to support multiple Parallelstore instances. In the meantime, the changes I suggest will improve reliability.
@@ -41,6 +41,17 @@ sed -i "s/#.*transport_config/transport_config/g" $daos_config | |||
sed -i "s/#.*allow_insecure:.*false/ allow_insecure: true/g" $daos_config | |||
sed -i "s/.*access_points.*/access_points: $access_points/g" $daos_config | |||
|
|||
# Get interface names with "s0f0" suffix | |||
if ifconfig -a | grep 's0f0'; then |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe that you are attempting to identify devices that are on the same PCI bus as GPUs in the A3 VM types (a3-highgpu-8g and a3-megagpu-8g). This is not a reliable mechanism by which to do that.
- I believe ifconfig is not uniformly installed across OS clients. (e.g. Ubuntu 22.04)
- The "tail" of the device name is the least predictable element of the automated device name.
The following command strictly identifies ethernet devices not attached to PCI slot 0, which is guaranteed to be nic0 as seen by the Cloud Console. It is also the interface guaranteed to route to the metadata server
find /sys/class/net/ -not -name 'enp0s*' -regextype posix-extended -regex '.*/enp[0-9]+s.*' -printf "%f\n" | paste -s -d ','
I believe you could this command and then test for whether it has zero length.
mount_command="if mountpoint -q '$local_mount'; then fusermount3 -u '$local_mount'; fi; for i in {1..10}; do /bin/dfuse -m '$local_mount' --pool default-pool --container default-container --multi-user $mount_options --foreground && break; sleep 1; done" | ||
|
||
# Construct the service name with the local_mount suffix | ||
service_name="mount_parallelstore_${local_mount//\//_}.service" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use systemd-escape -p "${local_mount}"
to generate that part of the unit name.
[Unit] | ||
Description=DAOS Mount Service | ||
After=network-online.target daos_agent.service |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[Unit] | |
Description=DAOS Mount Service | |
After=network-online.target daos_agent.service | |
[Unit] | |
Description=DAOS Mount Service | |
After=network-online.target daos_agent.service | |
Before=slurmd.service | |
ConditionPathIsMountPoint=!${local_mount} |
# Store the mounting logic in a variable | ||
mount_command='for i in {1..10}; do /bin/dfuse -m '$local_mount' --pool default-pool --container default-container --multi-user '$mount_options' --foreground && break; echo \"dfuse, failed, retrying in 1 second (attempt '$i'/10)\"; sleep 1; done' | ||
mount_command="if mountpoint -q '$local_mount'; then fusermount3 -u '$local_mount'; fi; for i in {1..10}; do /bin/dfuse -m '$local_mount' --pool default-pool --container default-container --multi-user $mount_options --foreground && break; sleep 1; done" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would remove this line entirely. The command should not include sleep logic.
Restart=always | ||
RestartSec=1 | ||
ExecStart=/bin/bash -c "$mount_command" | ||
ExecStop=fusermount3 -u '$local_mount' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Restart=always | |
RestartSec=1 | |
ExecStart=/bin/bash -c "$mount_command" | |
ExecStop=fusermount3 -u '$local_mount' | |
Restart=on-failure | |
RestartSec=10 | |
ExecStart=/bin/dfuse -m $local_mount --pool default-pool --container default-container --multi-user $mount_options --foreground | |
ExecStop=/usr/bin/fusermount3 -u $local_mount |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
After you make these changes and we discuss how multi-Parallelstore instance suport would look like, I would like to consider using systemd unit templates to avoid re-creation of multiple service files.
|
||
# --- Begin: Add systemd service creation --- | ||
cat >/usr/lib/systemd/system/mount_parallelstore.service <<EOF | ||
cat >/usr/lib/systemd/system/"${service_name}" <<EOF |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this land in /usr/lib/systemd/system
or /etc/systemd/system
? See table 1 here. I'd lean towards putting those into /etc/systemd/system
This PR,
Submission Checklist
NOTE: Community submissions can take up to 2 weeks to be reviewed.
Please take the following actions before submitting this pull request.